package com.itheima.leetcode.od.c.tree;

import java.util.*;
import java.util.stream.Collectors;

/**
 * <h3>树形目录删除</h3>
 */
public class DeleteTreeDirectory {
    // 全局Set，用于存储所有待删除的节点ID
    static Set<Integer> rm_list_all = new HashSet<>();

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int lines = scanner.nextInt();

        // 使用 HashMap 构建树
        Map<Integer, List<Integer>> tree = new HashMap<>();
        for (int i = 0; i < lines; i++) {
            int s = scanner.nextInt(); // 子节点
            int p = scanner.nextInt(); // 父节点
            tree.computeIfAbsent(p, k -> new ArrayList<>()).add(s);
        }

        int rm_p = scanner.nextInt();
        scanner.close();

        find_rm(rm_p, tree);

        // 使用 Set 自动处理去重
        Set<Integer> res_set = new HashSet<>();

        // 精确复制Python的逻辑：只从tree的键值对中收集节点
        for (Map.Entry<Integer, List<Integer>> entry : tree.entrySet()) {
            int k = entry.getKey(); // 父节点
            List<Integer> v = entry.getValue(); // 子节点列表

            // 检查父节点，如果没被删除且不是0，则添加
            if (!rm_list_all.contains(k) && k != 0) {
                res_set.add(k);
            }
            // 检查所有子节点
            for (int i : v) {
                if (!rm_list_all.contains(i) && i != 0) {
                    res_set.add(i);
                }
            }
        }

        // 将 Set 转换为 List 并排序
        List<Integer> res = new ArrayList<>(res_set);
        Collections.sort(res);

        // 格式化输出
        System.out.println(res.stream()
                .map(String::valueOf)
                .collect(Collectors.joining(" ")));
    }

    // 递归函数，查找并记录所有需要删除的节点
    public static void find_rm(int rm_pv, Map<Integer, List<Integer>> tree_) {
        rm_list_all.add(rm_pv);
        if (tree_.containsKey(rm_pv)) {
            for (int i : tree_.get(rm_pv)) {
                find_rm(i, tree_);
            }
        }
    }
}